#pragma once

#include <fstream>
#include <sstream>
#include <iostream>
#include <string>
#include <time.h>

#include "Utilizador.h"
#include "Inimigo.h"
#include "Terreno.h"

using namespace std;

#define MAX_JOGADORES 50

class JogoServidor
{
	Utilizador jog[MAX_JOGADORES];
	int numRegistados, tot_linhas, tot_colunas, numObjectos, numInimigos;
	Terreno tabuleiro[21][21];
	Inimigo enemy[5];

public:
	JogoServidor(void);
	~JogoServidor(void);

	string getNomeUtilizador(int pos){ return jog[pos].getNome();}
	Utilizador getJogador(){return jog[0];}
	int getLinhaUser(){return jog[0].getLinha();}
	int getColunaUser(){return jog[0].getColuna();}
	int getNumRegistados(){return numRegistados;}
	int getTotLinhas() {return tot_linhas;}
	int getTotColunas() {return tot_colunas;}
	int getNumObjectos(){return numObjectos;}
	int getNumInimigos(){return numInimigos;}
	Terreno getTerreno(int l, int c){return tabuleiro[l][c];}
	int getTipoTerreno(int l, int c) {return tabuleiro[l][c].getTipo();}
	Inimigo getInimigos(int i){return enemy[i];}
	int getLinhaEnemy(int i){return enemy[i].getLinha();}
	int getColunaEnemy(int i){return enemy[i].getColuna();}
	

	void setJogador(Utilizador u){jog[0] = u;}
	void setNumRegistados(int num){numRegistados = num;}
	void setTotLinhas(int tl) {tot_linhas = tl;}
	void setTotColunas(int tc) {tot_colunas = tc;}
	void setNumObjectos(int o){numObjectos = o;}
	void setNumInimigos(int ni){numInimigos = ni;}
	void setTerrenoTabuleiro(int t, int l, int c) {tabuleiro[l][c].setTerreno(t,l,c);}
	void setTipoTerreno(int t, int l, int c) {tabuleiro[l][c].setTipo(t);}
	void setPosLinhaEnemy(int i, int l){enemy[i].setLinha(l);}
	void setPosColunaEnemy(int i, int c){enemy[i].setColuna(c);}

	void lerInformacaoJogadores();
	void ler_labirinto(string nomef);
	int adicionaNovoUtilizador(string n, string p);
	int verificaLogin(string n, string p);
	void gravaInformacaoJogadores();
	bool verificaLimites(char botao, int posActualLinha, int posActualColuna);
	void MoveInimigos(int i);
	void actualizaInimigo();
	void movePacman(char botao, int posActualLinha, int posActualColuna);
	bool mudaDireccao(char botaoanterior, char botaonovo, int posActualLinha, int posActualColuna);
};